package cn.myzf.fort.fortaccess.autoconfigure;

public class Ca {


    public int minArray(int[] numbers) {
        int low = 0;
        int high = numbers.length - 1;
        while (low < high) {
            int pivot = low + (high - low) / 2;
            if (numbers[pivot] < numbers[high]) {
                high = pivot;
            } else if (numbers[pivot] > numbers[high]) {
                low = pivot + 1;
            } else {
                high -= 1;
            }
        }
        return numbers[low];
    }


    public int mmArray(int[] numbers) {
        int low = 0;
        int high = numbers.length - 1;//从最后一个开始，默认从最后一个元素开始
        while (low < high) {
            int pivot = low + (high-low)/2;
            if (numbers[pivot] < numbers[high]) {//如果中间的元素比最后一个元素小，因为是找最小元素的，所以就让high去指向中间元素，high是代表最小元素的
                high = pivot;//
            } else if (numbers[pivot] > numbers[high]){//因为中间比hith大，因为high是指向最小元素的，所以就让low去找
                low = pivot + 1;
            }else {
                --high;
            }//中间元素等于high，因为high指向的是最小的，所以就high就往左边移动，越往左数字越小，因为数组是有序的
        }


        return numbers[high];
    }



    public static void main(String[] args) {
        int[] a = {3,4,5,-4,-1,0,1,2,3,7,56};
        Ca ca = new Ca();
        System.out.println(ca.mmArray(a));
    }
/*    把一个数组最开始的若干个元素搬到数组的末尾，我们称之为数组的旋转。输入一个递增排序的数组的一个旋转，输出旋转数组的最小元素。例如，数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转，该数组的最小值为1。  

    示例 1：

    输入：[3,4,5,1,2]
    输出：1
    示例 2：

    输入：[2,2,2,0,1]
    输出：0

    class Solution {
    public int minArray(int[] numbers) {
        int low = 0;
        int high = numbers.length - 1;
        while (low < high) {
            int pivot = low + (high - low) / 2;
            if (numbers[pivot] < numbers[high]) {
                high = pivot;
            } else if (numbers[pivot] > numbers[high]) {
                low = pivot + 1;
            } else {
                high -= 1;
            }
        }
        return numbers[low];
    }
}


*/




}
